C++ 的设计
简单性是一个重要设计准则:如果在某个地方有一个选择,简化语言的定义或者简化编译器,那么我们一定选前者。当然,还有一个重要的考虑是保持与C的高度兼容性,这也就排除了对C语法的清理。
C++没有内部的高级数据类型,也没有高级的基本操作。举例来说,C++没有提供带有求逆运算的矩阵类型,也没有带拼接运算的字符串类型。如果某个用户需要一个类型,那么可以在语言本身之中定义它。事实上,定义新的通用或者专用类型就是在C++里最基本的程序设计活动。一个设计良好的用户定义类型与一个内部类型之间的差异仅仅在于其定义的方式,而不在其使用方式。在第三部分描述的标准库提供了许多这样的类型及其使用的例子。从用户的观点看,在内部类型和由标准库提供的类型之间的差异非常小。
在C++的设计中,极力避免了那些即使不用也会带来运行时间或者空间额外开销的特征。例如,要求必须在每个对象里存储某种“薄记信息”的结构被拒绝了。所以,如果你定义了一种由两个16位的量组成的结构,它将能放进一个32位的寄存器里。
C++被设计为能使用传统的编译和运行时的环境,也就是那种在UNIX上的C程序设计环境。幸运的是,C++从来没有被束缚于UNIX,它只是简单地采用UNIX和C作为一种语言、库、编译器、连接器、执行环境等之间关系的模型。这种最小化的模型帮助C++在几乎每个计算平台上取得了成功。然而,在那些提供了更多有意义的支持的环境里,使用C++当然就更好了,像动态装载、增量编译、类型定义数据库等都能得到很好的收敛,又不会影响语言本身。
C++的类型检查和数据隐藏特征依赖于编译时对程序的分析,以防止因为意外而破坏数据的情况。它们并不提供系统安全性或防止某些人有意地打破这些规则。它们当然可以随意使用而不会带来运行时额外的时间或空间开销。这种想法是很有用的,一种语言特征必须不仅是优美的,还是在真实程序的环境中能够负担起的东西。
有关C++设计的更系统和详尽的描述,请看[Stroustrup,1994]。
🔚